﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using ICIA.ARojas.Visual.DestinoFisico.ViewModel;
using System.Collections.ObjectModel;
using ICIA.ARojas.Silverlight.WCFClient.DestinoFisicoCliente;

namespace ICIA.ARojas.Visual.DestinoFisico
{
    public partial class VwDestinoFisico : UserControl
    {

        VmDestinoFisico viewmodel;

        MyTreeViewItem itemSeleccionado;

        #region servicoio

        ObservableCollection<ICIA.ARojas.Silverlight.Entities.DestinoFisico> destinos = new ObservableCollection<ICIA.ARojas.Silverlight.Entities.DestinoFisico>();
        DestinoFisicoNegociosServicioClient servicioDestinoFisico = new DestinoFisicoNegociosServicioClient();

        #endregion


        public VwDestinoFisico()
        {
            InitializeComponent();
            viewmodel = new VmDestinoFisico();
            this.DataContext = viewmodel;

            myarbol.SelectedItemChanged += new RoutedPropertyChangedEventHandler<object>(myarbol_SelectedItemChanged);
            servicioDestinoFisico.ConstruirArbolPorNivelCompleted += servicioDestinoFisico_ConstruirArbolPorNivelCompleted;
            servicioDestinoFisico.ConstruirArbolPorNivelAsync(0);
        }

        void myarbol_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
        {
            try
            {
                itemSeleccionado = (MyTreeViewItem)e.NewValue;

                viewmodel.DestinoPadre = (ICIA.ARojas.Silverlight.Entities.DestinoFisico)itemSeleccionado.Tag;
                viewmodel.SelectedItem = (ICIA.ARojas.Silverlight.Entities.DestinoFisico)itemSeleccionado.Tag;

                servicioDestinoFisico.ObtenerHijosPorPadreIdCompleted += servicioDestinoFisico_ObtenerHijosPorPadreIdCompleted;
                var destino = (ICIA.ARojas.Silverlight.Entities.DestinoFisico)itemSeleccionado.Tag;
                servicioDestinoFisico.ObtenerHijosPorPadreIdAsync(destino.Id);
            }
            catch (Exception ex)
            {
                viewmodel.DestinoPadre = null;
            }
        }

        void servicioDestinoFisico_ObtenerHijosPorPadreIdCompleted(object sender, ObtenerHijosPorPadreIdCompletedEventArgs e)
        {
            if (e.Result.Count > 0)
                itemSeleccionado.Items.Clear();

            foreach (var d in e.Result)
            {

                MyTreeViewItem itm = new MyTreeViewItem();
                itm.Header = d.Codigo + " - " + d.Nombre;
                itm.Tag = d;
                itemSeleccionado.Items.Add(itm);
            }
        }

        void servicioDestinoFisico_ConstruirArbolPorNivelCompleted(object sender, ConstruirArbolPorNivelCompletedEventArgs e)
        {
            TreeViewItem root = new TreeViewItem();
            root.Header = "Expanda items";
            myarbol.Items.Add(root);

            foreach (var d in e.Result)
            {
                MyTreeViewItem itm = new MyTreeViewItem();
                itm.Header = d.Codigo + " - " + d.Nombre;
                itm.Tag = d;
                root.Items.Add(itm);
            }
        }     

    }


    public class MyTreeViewItem : TreeViewItem
    {
        public object Tag { get; set; }

    }

}
